perm filename BBOF.OL2[TIM,LSP] blob sn#771124 filedate 1984-09-25 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00005 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002
C00004 00003	 IN D WILL BE THE NEW FP
C00009 00004	(entry init subr)
C00011 00005	mroot (0)
C00015 ENDMK
CāŠ—;

'(THIS IS THE LAP FOR ((DSK (TIM LSP)) BBOF LSP)) 
'(COMPILED BY LISP COMPILER /936 COMAUX /25 PHAS1 /84 MAKLAP /80 INITIA /117) 

;COMPILED ON SEPTEMBER 25, 1984, AT 10:49 AM

(LAP TAK SUBR) 
(ARGS TAK (()  . 3)) 
(PUSH P (% 0 0 FIX1)) 
(PUSH FXP 0 1) 
(PUSH FXP 0 2) 
(PUSH FXP 0 3) 
(MOVE 7 -1 FXP) 
(CAMGE 7 -2 FXP) 
(JRST 0 G0002) 
(MOVE 7 0 FXP) 
(JRST 0 G0001) 
G0002 
(MOVE 7 -2 FXP) 
(SUBI 7 1) 
(PUSH FXP 7) 
(MOVEI 1 0 FXP) 
(NCALL 3 'TAK) 
(MOVE 10 -2 FXP) 
(SUBI 10 1) 
(MOVEI 3 -3 FXP) 
(MOVEI 2 -1 FXP) 
(PUSH FXP 10) 
(MOVEI 1 0 FXP) 
(PUSH FXP 7) 
(NCALL 3 'TAK) 
(MOVE 10 -3 FXP) 
(SUBI 10 1) 
(MOVEI 3 -4 FXP) 
(MOVEI 2 -5 FXP) 
(PUSH FXP 10) 
(MOVEI 1 0 FXP) 
(PUSH FXP 7) 
(NCALL 3 'TAK) 
(PUSH FXP 7) 
(MOVEI 3 0 FXP) 
(MOVEI 2 -1 FXP) 
(MOVEI 1 -3 FXP) 
(NCALL 3 'TAK) 
(SUB FXP (% 0 0 6 6)) 
G0001 
(SUB FXP (% 0 0 3 3)) 
(POPJ P) 
()  

;;; IN D WILL BE THE NEW FP

(DECLARE 
 (SETQ ROOT 4)
 (SETQ ARG3 -7)
 (SETQ ARG2 -6)
 (SETQ ARG1 -5)
 (SETQ RETVAL -4)
 (SETQ RETPC -3)
 (SETQ OLDFP -2)
 (SETQ TEMP -1)
 (SETQ LINK 0))

(LAP BBOF-TAK SUBR)
(ARGS BBOF-TAK (()  . 3)) 
(MOVE #.ROOT MROOT)
(MOVE D #.ROOT)		;NEXT FRAME
(MOVE #.ROOT #.LINK D)	
(MOVE TT 0 A)
(MOVEM TT #.ARG1 D)
(MOVE TT 0 B)
(MOVEM TT #.ARG2 D)
(MOVE TT 0 C)
(MOVEM TT #.ARG3 D)
(MOVEI TT RETURN)
(MOVEM TT #.RETPC D)
(MOVEI TT IFR)
(MOVEM TT #.OLDFP D)
(JRST 0 TAKF)
RETURN
(MOVE TT #.RETVAL D)
(MOVEM #.ROOT MROOT)
(JRST 0 FIX1)

TAKF
(MOVE TT #.ARG2 D)	;#.ARG2
(CAMGE TT #.ARG1 D)  	;#.ARG1
(JRST 0 CONT) 
(MOVE TT #.ARG3 D) 
(JRST 0 END) 
CONT

;;; FRAME FOR OUTER CALL
(MOVE R #.ROOT)		;NEXT FP
(MOVE #.ROOT #.LINK R)	;NEW ROOT
(MOVEM R #.TEMP D)	;STORE NEXT FP IN CURRENT FRAME
(MOVE TT #.OLDFP D)
(MOVEM TT #.OLDFP R)	;OLDFP STORED
(MOVE TT #.RETPC D)	;CURRENT RETURN ADDRESS
(MOVEM TT #.RETPC R)	;IN NEW FRAME

(MOVE R #.ROOT)		;NEXT FP
(MOVE #.ROOT #.LINK R)	;NEW ROOT

(MOVE TT #.ARG1 D)	;SUB1 X
(SUBI TT 1) 
(MOVEM TT #.ARG1 R)	;TRANSFER ARGS
(MOVE TT #.ARG2 D)
(MOVEM TT #.ARG2 R)
(MOVE TT #.ARG3 D)
(MOVEM TT #.ARG3 R)

(MOVEM D #.OLDFP R)	;SAVE #.OLDFP
(MOVE D R)	 	;NEW FP
(MOVEI T RET1)		;RETURN PC
(MOVEM T  #.RETPC R)
(JRST 0 TAKF) 

RET1
(MOVE TT #.RETVAL D)	;GET RETURN VALUE
(MOVE F #.TEMP D)	;FP FOR OUTER FRAME
(MOVEM TT #.ARG1 F)	;STASH THAT

(MOVE R #.ROOT)		;NEXT FP
(MOVE #.ROOT #.LINK R)	;NEW ROOT

(MOVE TT #.ARG2 D) 	;SUB1 Y
(SUBI TT 1) 
(MOVEM TT #.ARG1 R)	;TRANSFER ARGS
(MOVE TT #.ARG3 D)
(MOVEM TT #.ARG2 R)
(MOVE TT #.ARG1 D)
(MOVEM TT #.ARG3 R)

(MOVEM D #.OLDFP R)	;SAVE #.OLDFP
(MOVE D R)	 	;NEW FP
(MOVEI T RET2)		;RETURN PC
(MOVEM T  #.RETPC R)
(JRST 0 TAKF) 

RET2
(MOVE TT #.RETVAL D)	;GET RETURN VALUE
(MOVE F #.TEMP D)	;FP FOR OUTER FRAME
(MOVEM TT #.ARG2 F)	;STASH THAT

(MOVE R #.ROOT)		;NEXT FP
(MOVE #.ROOT #.LINK R)	;NEW ROOT

(MOVE TT #.ARG3 D) 	;SUB1 Z
(SUBI TT 1) 
(MOVEM TT #.ARG1 R)	;TRANSFER ARGS
(MOVE TT #.ARG1 D)
(MOVEM TT #.ARG2 R)
(MOVE TT #.ARG2 D)
(MOVEM TT #.ARG3 R)

(MOVEM D #.OLDFP R)	;SAVE #.OLDFP
(MOVE D R)	 	;NEW FP
(MOVEI T RET3)		;RETURN PC
(MOVEM T  #.RETPC R)
(JRST 0 TAKF) 

RET3
(MOVE TT #.RETVAL D)	;GET RETURN VALUE
(MOVE F #.TEMP D)	;FP FOR OUTER FRAME
(MOVEM TT #.ARG3 F)	;STASH THAT

(MOVEM #.ROOT #.LINK D)	;ADD CURRENT FRAME TO FREELIST
(MOVE #.ROOT D)
(MOVE D F)
(JRST 0 TAKF)

END

(MOVE R D)		;CURRENT FP IN R
(MOVE D #.OLDFP R)	;RETURN FP IN D
(MOVEM TT #.RETVAL D)	;RETURN VALUE
(MOVE T #.RETPC R)	;READY TO RETURN

(MOVEM #.ROOT #.LINK R)
(MOVE #.ROOT R)
(JRST 0 0 T)		;RETURN


(entry init subr)
(movei tt bbof)
(addi tt #o10)
(movei d 999)
(movem tt mroot)
(move t tt)
loop
(addi tt #o10)
(movem tt 0 t)
(addi t #o10)
(sosle 0 d)
(jrst 0 loop)
(movei a 't)
(popj p)
mroot (0)
bbof (block 8000.)

(0)		;arg3
(0)		;arg2
(0)		;arg1
(0)		;retval
(0)		;retpc
(0)		;oldfp
(0)		;temp
ifr (0 0 nil)	;link

()